home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / basilix_detect.nasl < prev    next >
Text File  |  2005-03-31  |  5KB  |  183 lines

  1. #
  2. # This script was written by George A. Theall, <theall@tifaware.com>.
  3. #
  4. # See the Nessus Scripts License for details.
  5. #
  6.  
  7.  
  8. # NB: I define the script description here so I can later modify
  9. #     it with the version number and install directory.
  10.   desc["english"] = "
  11. This script detects whether the remote host is running BasiliX and
  12. extracts version numbers and locations of any instances found. 
  13.  
  14. BasiliX is a webmail application based on PHP and IMAP and powered by
  15. MySQL.  See <http://sourceforge.net/projects/basilix/> for more
  16. information. 
  17.  
  18. Risk factor : None";
  19.  
  20.  
  21. if (description) {
  22.   script_id(14308);
  23.   script_version("$Revision: 1.5 $");
  24.  
  25.   name["english"] = "BasiliX Detection";
  26.   script_name(english:name["english"]);
  27.  
  28.   script_description(english:desc["english"]);
  29.  
  30.   summary["english"] = "Checks for the presence of BasiliX";
  31.   script_summary(english:summary["english"]);
  32.  
  33.   script_category(ACT_GATHER_INFO);
  34.   script_copyright(english:"This script is Copyright (C) 2004 George A. Theall");
  35.  
  36.   family["english"] = "General";
  37.   script_family(english:family["english"]);
  38.  
  39.   script_dependencie("global_settings.nasl", "http_version.nasl");
  40.   script_require_ports("Services/www", 80);
  41.  
  42.   exit(0);
  43. }
  44.  
  45. include("global_settings.inc");
  46. include("http_func.inc");
  47. include("http_keepalive.inc");
  48.  
  49. host = get_host_name();
  50. port = get_http_port(default:80);
  51. if (debug_level) 
  52.     display("debug: looking for BasiliX on ", host, ":", port, ".\n");
  53.  
  54. if (!get_port_state(port)) 
  55.     exit(0);
  56. if (!can_host_php(port:port)) 
  57.     exit(0);
  58.  
  59. # Search for BasiliX in a couple of different locations.
  60. #
  61. # NB: Directories beyond cgi_dirs() come from a Google search - 
  62. #     'Basilix "you must enable javascript"' - and represent the more
  63. #     popular installation paths currently. Still, cgi_dirs() should 
  64. #     catch the directory if its referenced elsewhere on the target.
  65. dirs = make_list("", "/webmail", "/basilix", "/mail", cgi_dirs());
  66. installs = 0;
  67. foreach dir (dirs) 
  68. {
  69.     url = string(dir, "/basilix.php");
  70.       if (port == 443) 
  71.         url = string(url, "?is_ssl=1");
  72.       if (debug_level) 
  73.         display("debug: checking ", url, "...\n");
  74.  
  75.       # Get the page.
  76.       req = string(
  77.         "GET ",  url, " HTTP/1.1\r\n",
  78.         "Host: ", host, "\r\n",
  79.         "Cookie: BSX_TestCookie=yes\r\n",
  80.         "\r\n"
  81.       );
  82.       res = http_keepalive_send_recv(port:port, data:req);
  83.       if (res == NULL) 
  84.         exit(0);           # can't connect
  85.       if (debug_level) 
  86.         display("debug: res =>>", res, "<<\n");
  87.  
  88.   # Search for the version string in a couple of different places.
  89.   #
  90.   # - it's usually in the HTML title element.
  91.       title = strstr(res, "<title>");
  92.       if (title != NULL) 
  93.     {
  94.             title = title - strstr(title,string("\n"));
  95.             pat = "BasiliX (.+)</title>";
  96.             ver = eregmatch(pattern:pat, string:title, icase:TRUE);
  97.             if (ver != NULL) 
  98.             ver = ver[1];
  99.       }
  100.       # - otherwise, look at the "generator" meta tag.
  101.       if (isnull(ver)) 
  102.     {
  103.             generator = strstr(res, '<meta name="generator"');
  104.             if (generator != NULL) 
  105.         {
  106.                   generator = generator - strstr(generator, string("\n"));
  107.                   pat = 'content="BasiliX (.+)"';
  108.                   ver = eregmatch(pattern:pat, string:generator, icase:TRUE);
  109.                   if (ver != NULL) 
  110.                 ver = ver[1];
  111.             }
  112.       }
  113.       # - last try, older versions include it in the copyright notice.
  114.       if (isnull(ver)) 
  115.     {
  116.             copyright = strstr(res, "BasiliX v");
  117.             if (copyright != NULL) 
  118.         {
  119.                   copyright = copyright - strstr(copyright, string("\n"));
  120.                   pat = "BasiliX v(.+) -- ©";
  121.                   ver = eregmatch(pattern:pat, string:copyright, icase:TRUE);
  122.                   if (ver != NULL) 
  123.                 ver = ver[1];
  124.             }
  125.       }
  126.  
  127.       # Handle reporting
  128.       if (isnull(ver)) 
  129.     {
  130.             if (log_verbosity > 1) 
  131.             display("Can't determine version of BasiliX installed under ", dir, " on ", host, ":", port, "!\n");
  132.       }
  133.       # Success!
  134.       else 
  135.     {
  136.             if (debug_level) 
  137.             display("debug: BasiliX version =>>", ver, "<<\n");
  138.  
  139.             set_kb_item(
  140.               name:string("www/", port, "/basilix"), 
  141.               value:string(ver, " under ", dir)
  142.             );
  143.             installations[dir] = ver;
  144.             ++installs;
  145.       }
  146.       # Scan for multiple installations only if "Thorough Tests" is checked.
  147.       if (installs && !thorough_tests) break;
  148. }
  149.  
  150.  
  151.  
  152.  
  153. # Report any instances found unless Report verbosity is "Quiet".
  154. if (installs && report_verbosity > 0) 
  155. {
  156.     if (installs == 1) 
  157.     {
  158.         foreach dir (keys(installations)) {
  159.               # empty - just need to set 'dir'.
  160.         }
  161.             info = string("BasiliX ", ver, " was detected on the remote host under the path ", dir, ".");
  162.       }
  163.       else 
  164.     {
  165.             info = string(
  166.               "Multiple instances of BasiliX were detected on the remote host:\n",
  167.               "\n"
  168.             );
  169.             foreach dir (keys(installations)) 
  170.         {
  171.                   info = info + string("    ", installations[dir], ", installed under ", dir, "\n");
  172.             }
  173.             info = chomp(info);
  174.       }
  175.  
  176.       desc = ereg_replace(
  177.         string:desc["english"],
  178.         pattern:"This script[^\.]+\.", 
  179.         replace:info
  180.       );
  181.       security_note(port:port, data:desc);
  182. }
  183.